home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib13.dsk / CH.A.M.P. REPORTING.bas < prev    next >
BASIC Source File  |  2023-02-26  |  21KB  |  405 lines

  1. 1  REM  *************************
  2. 2  REM  *       CH.A.M.P.       *
  3. 3  REM  *  CHECKBOOK REPORTING  *
  4. 4  REM  *        PROGRAM        *
  5. 5  REM  *     BY JERRY HALL     *
  6. 6  REM  * COPYRIGHT (C) 1982 BY *
  7. 7  REM  *   MICRO-SPARC, INC.   *
  8. 8  REM  *  ALL RIGHTS RESERVED  *
  9. 9  REM  *************************
  10. 10 D$ =  CHR$(4):F$ = "CHECK"
  11. 20  POKE 33,40
  12. 30 H = 0:K = 0:J = 0:M = 0:V = 0:TR = 0:SP = 0:SL = 0: REM  *** SORT VARIABLES
  13. 40  GOTO 6000
  14. 100 M = TR: REM  *** SORT ROUTINE
  15. 110 M =  INT(M/2): IF M = 0  THEN 210
  16. 120 J = 1:K = TR -M
  17. 130 H = J
  18. 140 V = H +M
  19. 150  IF S1 = ( MID$ (ID$(H),SP,SL) < MID$ (ID$(V),SP,SL))  THEN 190
  20. 160 TMP$ = ID$(H):ID$(H) = ID$(V):ID$(V) = TMP$
  21. 170 H = H -M: IF H <1  THEN 190
  22. 180  GOTO 140
  23. 190 J = J +1: IF J >K  THEN 110
  24. 200  GOTO 130
  25. 210  RETURN 
  26. 300  REM  *** WHICH TO SORT ?
  27. 310  HOME : GOSUB 2000: VTAB 4: HTAB 9: PRINT "WHICH FIELD TO SORT ON ?"
  28. 320  FOR I = 25 TO 29: VTAB V%(I): HTAB 11: PRINT N$(I): NEXT I
  29. 330 LM = 25:HM = 29:H = 11: REM  SET MENU VARIABLES
  30. 340  GOSUB 600: REM  GOTO MENU CONTROLLER
  31. 350 SP = I1 -24: VTAB 23: CALL  -868
  32. 360  IF SP = 1  THEN SL = 5: GOTO 410: REM  SORT BY CHK NBR
  33. 370  IF SP = 2  THEN SP = 8:SL = 4: GOTO 410: REM  SORT BY DATE
  34. 380  IF SP = 3  THEN SP = 6:SL = 2: GOTO 410: REM  SORT BY MAJ/MIN CD
  35. 390  IF SP = 4  THEN SP = 6:SL = 7: GOTO 410: REM  MASTER SORT (MAJ/MIN/DATE/POST INDICATOR)
  36. 400  IF SP = 5  THEN  GOTO 5000: RETURN  TO MAINMENU
  37. 410  VTAB 16: HTAB 6: PRINT "SORT BY ";: INVERSE : PRINT N$(I1);: NORMAL : PRINT " IN"
  38. 420  VTAB 17: HTAB 6: PRINT "ASCENDING OR DESCENDING ORDER ?": VTAB 19: HTAB 6: PRINT "(A/D OR ";: INVERSE : PRINT " RETURN ";: NORMAL : PRINT " TO ABORT) : ";: GET AN$: IF AN$ < >"A"  AND AN$ < >"D"  AND AN$ < > CHR$(13)  THEN 420
  39. 430  IF AN$ =  CHR$(13)  THEN  GOTO 300
  40. 440  PRINT AN$:S1 = (AN$ = "A")
  41. 450  VTAB 16: CALL  -868: VTAB 19: CALL  -868: VTAB 17: CALL  -868: HTAB 10: FLASH : PRINT "SORT IN PROGRESS": NORMAL 
  42. 460  GOSUB 100: REM  *** SORT THE INDEXES
  43. 470  VTAB 17: HTAB 10: PRINT  CHR$(7);"SORT COMPLETED !"
  44. 480  FOR X = 1 TO 500: NEXT X: RETURN : REM   RETURN TO MAIN MENU
  45. 600  REM  *** MENU CONTROLLER
  46. 610  REM  ENTER RTN WITH LM = LOW MENU ITEM NUMBER , HM = HIGH MENU ITEM & H = HTAB
  47. 620 I1 = LM:I2 = LM
  48. 630  INVERSE : VTAB V%(I1): HTAB H: PRINT N$(I1): NORMAL 
  49. 640  VTAB 23: PRINT "((  <--- , ---> OR ";: INVERSE : PRINT "RETURN";: NORMAL : PRINT " TO SELECT  ))";: GET AN$
  50. 650  IF AN$ < > CHR$(8)  AND AN$ < > CHR$(21)  AND AN$ < > CHR$(32)  AND AN$ < > CHR$(13)  THEN  PRINT : GOTO 640
  51. 660  PRINT : IF AN$ =  CHR$(8)  THEN I2 = I1 -1: IF I2 <LM  THEN I2 = HM
  52. 670  IF AN$ =  CHR$(21)  OR AN$ =  CHR$(32)  THEN I2 = I1 +1: IF I2 >HM  THEN I2 = LM
  53. 680  IF AN$ =  CHR$(13)  THEN 720
  54. 690  VTAB V%(I1): HTAB H: PRINT N$(I1)
  55. 700  INVERSE : VTAB V%(I2): HTAB H: PRINT N$(I2): NORMAL 
  56. 710 I1 = I2: GOTO 640
  57. 720  RETURN : REM  I1 CONTAINS # OF CHOICE SELECTED
  58. 800  REM  ** GET MONTHS WANTED **
  59. 810  HOME :SM = 0:RG = 0: GOSUB 2000
  60. 820  VTAB 3: HTAB 13: PRINT "WHICH  MONTH :": VTAB 5: HTAB 15: PRINT "S=SERIES": VTAB 7: HTAB 15: PRINT "1-12": VTAB 9: HTAB 15: INVERSE : PRINT "RETURN";: NORMAL : PRINT " TO ABORT ";: INPUT SM$: IF SM$ = ""  THEN 5000
  61. 825  IF SM$ = "S"  THEN 850
  62. 830 SM =  VAL(SM$) -1: IF SM <0  OR SM >11  THEN  GOTO 810
  63. 840 RG = 0: RETURN 
  64. 850  REM  ** A SERIES OF MONTHS **
  65. 860  HOME : GOSUB 2000: VTAB 3: HTAB 3: PRINT "WHICH STARTING MONTH (1-12) ";: INPUT SM$:SM =  VAL(SM$) -1: IF SM <0  OR SM >11  THEN 860
  66. 870 EM = 12 -SM
  67. 880  VTAB 5: HTAB 3: PRINT "STARTING WITH ";MO$(SM): HTAB 5: PRINT "FOR HOW MANY MONTHS (1-";EM;") ";: INPUT RG$:RG =  VAL(RG$) -1: IF RG <0  OR RG >EM -1  THEN 880
  68. 890  RETURN 
  69. 900  REM  ** PRINT REPORT **
  70. 910 N$(0) = N$(ME): IF ME < >10  AND ME < >12  THEN  GOTO 940
  71. 920  IF RG = 0  THEN N$(ME) =  LEFT$(N$(ME), LEN(N$(ME)) -8) +MO$(SM): GOTO 940
  72. 930 N$(ME) =  LEFT$(N$(ME), LEN(N$(ME)) -8) + LEFT$(MO$(SM),3) +" - " + LEFT$(MO$(SM +RG),3)
  73. 940  GOSUB 4500
  74. 950 LC = 0: FOR RL = 1 TO 1 +RG
  75. 960  GOSUB 2000: GOSUB 2100
  76. 970 DT = 0:CT = 0:REC% = 0
  77. 980  FOR IP = 1 TO TR: IF ME < >11  AND ME < >13  AND  VAL( MID$ (ID$(IP),8,2)) < >SM +1  THEN 1090
  78. 990  IF TY$ = ""  THEN 1010: REM  NOT 'P' OR 'O'
  79. 1000  IF  MID$ (ID$(IP),12,1) < >TY$  THEN 1090
  80. 1010 PNT =  VAL( MID$ (ID$(IP),13,4))
  81. 1020  GOSUB 4700:REC% = REC% +1
  82. 1050  HTAB 6 - LEN(O$(1)): PRINT O$(1);: HTAB 7: PRINT O$(3)"/"O$(4);: HTAB 13: PRINT  LEFT$(O$(2),18);: HTAB 40 - LEN(O$(5)): PRINT O$(5)
  83. 1060  IF  LEFT$(O$(1),1) = "D"  THEN DT = DT + VAL(O$(5)): GOTO 1080
  84. 1070 CT = CT + VAL(O$(5))
  85. 1080 LC = LC +1: IF LC >16  THEN  GOSUB 2350:LC = 0: GOSUB 2000: GOSUB 2100
  86. 1090  NEXT IP: IF REC% = 0  THEN  GOSUB 2300:LC = 0: GOTO 1140
  87. 1100 LC = LC +5: IF LC >17  THEN  GOSUB 2350:LC = 0: GOSUB 2000: GOSUB 2100
  88. 1110 H = 40: PRINT : IF ME = 10  OR ME = 12  THEN  PRINT " ";MO$(SM);"'S "; LEFT$(N$(0), LEN(N$(0)) -19);
  89. 1120  HTAB 31: PRINT "========="
  90. 1130  PRINT "  TOTAL DEPOSITS .............";:PP = DT: GOSUB 3200: PRINT "  TOTAL CHECKS ...............";:PP = CT: GOSUB 3200:LC = 0
  91. 1140  GOSUB 2350:SM = SM +1: NEXT RL
  92. 1150  PRINT D$:N$(ME) = N$(0): RETURN 
  93. 1200  REM  *** MAJOR/MINOR CODE ANALYSIS
  94. 1210  GOSUB 2000
  95. 1220  VTAB 20: HTAB 1: PRINT "<< '*' FOR ALL -- 'CNTL B' FOR MENU >>": VTAB 22: HTAB 6: PRINT "<< OR <--- TO CLEAR FIELD >>"
  96. 1230  VTAB 5: HTAB 5: PRINT "ENTER MAJOR CODES : ";: CALL  -868: PRINT MAJ$;: GET AN$: IF  LEN(AN$) = 0  THEN 1230
  97. 1235  PRINT AN$: IF AN$ =  CHR$(2)  THEN MAJ$ = "": RETURN 
  98. 1240  IF AN$ =  CHR$(13)  THEN 1255
  99. 1242  IF AN$ =  CHR$(8)  THEN MAJ$ = "": GOTO 1230
  100. 1245 MAJ$ = MAJ$ +AN$: IF AN$ = "*"  THEN MAJ$ = AN$: GOTO 1255
  101. 1250  GOTO 1230
  102. 1255  VTAB 7: HTAB 5: PRINT "ENTER MINOR CODES : ";: CALL  -868: PRINT MIN$;: GET AN$: IF  LEN(AN$) = 0  THEN 1255
  103. 1260  PRINT AN$: IF AN$ =  CHR$(2)  THEN MIN$ = "":MAJ$ = "": RETURN 
  104. 1265  IF AN$ =  CHR$(13)  THEN 1280
  105. 1267  IF AN$ =  CHR$(8)  THEN MIN$ = "": GOTO 1255
  106. 1270 MIN$ = MIN$ +AN$: IF AN$ = "*"  THEN MIN$ = AN$: GOTO 1280
  107. 1275  GOTO 1255
  108. 1280  GOSUB 4500:LC = 0
  109. 1285  GOSUB 2000: GOSUB 2150
  110. 1290 DT = 0:CT = 0:REC% = 0:MIN =  LEN(MIN$):MAJ =  LEN(MAJ$)
  111. 1300  FOR IP = 1 TO TR
  112. 1310  IF MAJ$ = "*"  THEN 1340
  113. 1320  FOR M = 1 TO MAJ: IF  MID$ (ID$(IP),6,1) =  MID$ (MAJ$,M,1)  THEN 1340
  114. 1330  NEXT M: GOTO 1500
  115. 1340  IF MIN$ = "*"  THEN 1400
  116. 1350  FOR M = 1 TO MIN: IF  MID$ (ID$(IP),7,1) =  MID$ (MIN$,M,1)  THEN 1400
  117. 1360  NEXT M: GOTO 1500
  118. 1400  REM  *** DO MAJ/MIN REPORT
  119. 1410 PNT =  VAL( MID$ (ID$(IP),13,4))
  120. 1420  GOSUB 4700:REC% = REC% +1
  121. 1460  HTAB 6 - LEN(O$(1)): PRINT O$(1);: HTAB 7: PRINT O$(3)"/"O$(4);: HTAB 13: PRINT O$(7)"/"O$(8);: HTAB 17: PRINT  LEFT$(O$(2),14);: HTAB 40 - LEN(O$(5)): PRINT O$(5)
  122. 1470  IF  LEFT$(O$(1),1) = "D"  THEN DT = DT + VAL(O$(5)): GOTO 1490
  123. 1480 CT = CT + VAL(O$(5))
  124. 1490 LC = LC +1: IF LC >16  THEN  GOSUB 2350:LC = 0: GOSUB 2000: GOSUB 2150
  125. 1500  NEXT IP: IF REC% = 0  THEN  GOSUB 2300:LC = 0: GOTO 1530
  126. 1510 LC = LC +5: IF LC >17  THEN  GOSUB 2350:LC = 0: GOSUB 2000: GOSUB 2150
  127. 1520 H = 40: PRINT : HTAB 31: PRINT "==========": PRINT "  TOTAL DEPOSITS .............";:PP = DT: GOSUB 3200: PRINT "  TOTAL CHECKS ...............";:PP = CT: GOSUB 3200:LC = 0
  128. 1530  GOSUB 2350
  129. 1540  PRINT D$:MAJ$ = "":MIN$ = "": RETURN 
  130. 1600  REM  ** PRINT BANK RECON
  131. 1610  HOME : GOSUB 2000: VTAB 3: HTAB 8: PRINT "ENTER PRINTER SLOT # : ";: GET SL$: PRINT SL$:SL =  VAL(SL$): IF SL$ <"0"  OR SL$ >"7"  THEN  GOTO 1610
  132. 1615  VTAB 5: HTAB 8: PRINT "ENTER TODAY'S DATE": HTAB 10: INPUT "FORMAT (MM/DD/YY):";DTE$
  133. 1620  VTAB 9: HTAB 8: PRINT "IS THIS CORRECT ? (Y/N) : ";: GET AN$: PRINT AN$: IF AN$ < >"Y"  THEN 1610
  134. 1630  HOME : GOSUB 4500: PRINT D$"PR#";SL: PRINT  CHR$(9);"80N"
  135. 1640  GOSUB 1770:LC = 0
  136. 1650 ES = 1:ES$ = " ": IF BB <0  THEN ES =  -1:ES$ = "-"
  137. 1660 EB = BB:EB$ =  LEFT$( STR$(EB *ES +.005), LEN( STR$(EB *ES +.005)) -1) +ES$
  138. 1670  HTAB 10: PRINT  MID$ (DTE$,1,5);: HTAB 24: PRINT "BANK'S ENDING BALANCE"; LEFT$(Z$,20); RIGHT$(Z$ +EB$,10): PRINT " "
  139. 1680  FOR IP = 1 TO TR: IF  MID$ (ID$(IP),12,1) = "P"  OR  MID$ (ID$(IP),2,1) < >"D"  THEN 1700
  140. 1690 PNT =  VAL( MID$ (ID$(IP),13,4)): GOSUB 1800
  141. 1700  NEXT : PRINT Z$;Z$;"    "; LEFT$(DH$,10): PRINT 
  142. 1710  FOR IP = 1 TO TR: IF  MID$ (ID$(IP),12,1) = "P"  OR  MID$ (ID$(IP),2,1) = "D"  THEN 1730
  143. 1720 PNT =  VAL( MID$ (ID$(IP),13,4)): GOSUB 1800
  144. 1730  NEXT : PRINT Z$;Z$;"    "; LEFT$(DH$,10): PRINT 
  145. 1740  HTAB 10: PRINT  MID$ (DTE$,1,5);: HTAB 24: PRINT "CHECKBOOK'S ENDING BALANCE"; LEFT$(Z$,14); RIGHT$(Z$ +EB$,11)
  146. 1750  PRINT Z$;Z$;"    ";"==========": PRINT  CHR$(9);"40N": PRINT  CHR$(12): PRINT D$" PR# 0": IF SL = 0  THEN  GOSUB 2350
  147. 1760  RETURN 
  148. 1770  REM  ** PRINT BANK RECON HEADINGS **
  149. 1775 HL$ =  RIGHT$(N$(ME), LEN(N$(ME)) -6) +" AS OF " +DTE$: HTAB 40 -( INT( LEN(HL$)/2)): PRINT HL$: PRINT " ": PRINT " ": PRINT " ": PRINT " "
  150. 1780  PRINT "   CK #  DATE  MAJ MIN";: HTAB 31: PRINT "PAY-TO"; LEFT$(Z$,19);"TXN AMT   END  BAL"
  151. 1785  PRINT "   ----  ----- --- --- ";DH$;" -------------------"
  152. 1790  RETURN 
  153. 1800  REM  ** FORMAT AND PRINT OUTSTANDING ITEMS
  154. 1810  GOSUB 4700
  155. 1820  HTAB 8 - LEN(O$(1)): PRINT O$(1);: HTAB 10: PRINT O$(3);"/";O$(4);: HTAB 17: PRINT O$(7);: HTAB 21: PRINT O$(8);
  156. 1830 SG =  -1:SG$ = "-": IF  LEFT$(O$(1),1) = "D"  THEN SG = 1:SG$ = "+"
  157. 1840 EB =  VAL( STR$(EB)) +( VAL(O$(5)) *SG):ES = 1:ES$ = " ": IF EB <0  THEN ES =  -1:ES$ = "-"
  158. 1850 TA$ =  RIGHT$(Z$ +O$(5),9) +SG$:EB$ =  STR$(EB *ES +.005): IF EB = 0  THEN EB$ = "0.005"
  159. 1860 EB$ =  LEFT$(EB$, LEN(EB$) -1) +ES$
  160. 1870 EB$ =  RIGHT$(Z$ +EB$,11)
  161. 1880  HTAB 24: PRINT  LEFT$(O$(2) +Z$,30);TA$;EB$
  162. 1885 LC = LC +1: IF LC >40  THEN  PRINT  CHR$(12): GOSUB 1770:LC = 0
  163. 1890  RETURN 
  164. 1900  REM  ** RUN CHAMP.GRAPHICS
  165. 1910 : HOME : VTAB 10: HTAB 5: PRINT "GRAPHICS PROGRAM MODULE IS NOT": HTAB 5: PRINT "AVAILABLE AT THIS TIME."
  166. 1920  GOSUB 2350: RETURN 
  167. 2000  REM  ** FORMAT HEADINGS **
  168. 2010 HS = 0:HV = 1: HOME 
  169. 2020 HL$ = N$(ME)
  170. 2030  GOSUB 2200
  171. 2040  RETURN 
  172. 2100  REM  ** FORMAT COLUMN HEADINGS **
  173. 2110  VTAB 3: HTAB 2
  174. 2120  PRINT "CK # DATE  PAY-TO";: HTAB 33: PRINT "AMOUNT"
  175. 2130  HTAB 2: PRINT "---- ----- ------------------ --------"
  176. 2140  RETURN 
  177. 2150  REM  ** FORMAT MAJ/MIN CODE REPORT HEADINGS **
  178. 2160  VTAB 3: HTAB 2
  179. 2170  PRINT "CK # DATE  M/M PAY-TO";: HTAB 33: PRINT "AMOUNT"
  180. 2180  HTAB 2: PRINT "---- ----- --- -------------- --------"
  181. 2190  RETURN 
  182. 2200  REM  ** PRINT HEADING ROUTINE **
  183. 2210  REM  HV=VTAB, HL$ = WHAT TO PRINT, HS = (0=NORMAL, 1=INVERSE)
  184. 2220  IF HS = 1  THEN HS = 0: INVERSE 
  185. 2230  VTAB HV: HTAB (20 -( INT( LEN(HL$)/2))): PRINT HL$
  186. 2240  NORMAL : RETURN 
  187. 2300  REM  ** NO RECORDS FOUND **
  188. 2310  IF ME = 11  OR ME = 13  OR MM = 1  THEN HL$ = "(NO RECORDS FOUND FOR THE YEAR)":HV = 5:HS = 1: GOTO 2330
  189. 2320 HL$ = "(NO RECORDS FOUND FOR " +MO$(SM) +")":HV = 5:HS = 1
  190. 2330  GOSUB 2200
  191. 2340  RETURN 
  192. 2350  REM  ** END OF SCREEN PAUSE ROUTINE **
  193. 2360  VTAB 23: HTAB 4: PRINT "<<< PRESS ANY KEY TO CONTINUE >>> ";: GET AN$: PRINT AN$: RETURN 
  194. 2400  REM  ** VIEW A RECORD **
  195. 2410  GOSUB 4500:X = TR +1
  196. 2420  IF X = 1  THEN 5000
  197. 2430  HOME : GOSUB 2000: VTAB 3: HTAB 8: PRINT " WHAT TYPE OF SEARCH ?"
  198. 2440  FOR I = 21 TO 24: VTAB V%(I): HTAB 12: PRINT N$(I): NEXT 
  199. 2450 LM = 21:HM = 24:H = 12: REM  SET UP MENU VALUES
  200. 2460  GOSUB 600: REM  GOTO MENU CONTROLLER
  201. 2470 A = I1
  202. 2480 SQ = 0:SS = 0
  203. 2490  IF A = 21  THEN 2760: REM  BY REC NBR
  204. 2500  IF A = 22  THEN 2530: REM  BY MATCH
  205. 2510  IF A = 23  THEN SS = 1: GOTO 2760: REM  SEQ SEARCH
  206. 2520  GOTO 5000: REM  RETURN TO MENU
  207. 2530  HOME : VTAB 1: HTAB 13: PRINT "SEARCH FOR MATCH": VTAB 4: HTAB 14: PRINT "Q/S     FIELD": VTAB 5: HTAB 13: PRINT "----- -----------"
  208. 2540  FOR I = 1 TO N: HTAB 15: IF T%(I,3) >0  THEN  INVERSE 
  209. 2550  PRINT I;: NORMAL : PRINT " ";: VTAB V%(I): HTAB 20: PRINT N$(I): NEXT 
  210. 2560  HTAB 15: PRINT I;" ";: VTAB V%(I): HTAB 20: PRINT N$(I)
  211. 2570  VTAB 17: HTAB 6: PRINT "PLEASE SELECT SEARCH FIELD ?"
  212. 2580 LM = 1:HM = 9:H = 20: REM  SET MENU VARIABLES
  213. 2590  GOSUB 600: REM  GOTO MENU CONTROLLER
  214. 2600 A = I1: IF A = 9  THEN 2400
  215. 2610  VTAB 23: CALL  -868: VTAB 17: CALL  -868: HTAB 6: PRINT " SEARCH FOR "N$(A);: INPUT " = ";A$
  216. 2620  IF  LEN(A$) = 0  THEN A$ =  LEFT$(Z$,T%(A,2))
  217. 2630 IA$ = A$
  218. 2640  IF A = 3  OR A = 4  THEN IA$ =  RIGHT$("0" +IA$,2):A$ = IA$
  219. 2650  IF A = 1  AND  LEFT$(IA$,1) >"9"  AND  LEN(IA$) >1  THEN IA$ =  LEFT$(IA$,1) + RIGHT$("000" + STR$( VAL( MID$ (IA$,2))),3)
  220. 2660  IF  LEN(A$) >T%(A,2)  THEN A$ =  LEFT$(A$,T%(A,2)):IA$ = A$
  221. 2670  IF  ASC(A$) = 1  THEN A$ =  RIGHT$(A$, LEN(A$) -1)
  222. 2680 I = 1: GOSUB 3300
  223. 2690  IF I = X  THEN 2820
  224. 2700  IF T%(A,3) = 0  THEN 2730
  225. 2710  IF A = 1  AND  LEFT$(IA$,1) < = "9"  AND  VAL( MID$ (ID$(I),T%(A,4), LEN(IA$) +1)) =  VAL(IA$)  THEN 2730
  226. 2720  IF  MID$ (ID$(I),T%(A,4), LEN(IA$)) < >IA$  THEN 2750
  227. 2730 PNT =  VAL( MID$ (ID$(I),13)): GOSUB 4700: HTAB 10: VTAB 1: PRINT "RECORD NUMBER ";PNT;"   "
  228. 2740  IF  LEFT$(O$(A), LEN(A$)) = A$  THEN 2900
  229. 2750 I = I +1: GOTO 2690
  230. 2760  VTAB 3: CALL  -958
  231. 2770  VTAB 2: PRINT : CALL  -868: PRINT "ENTER";: IF SS = 1  THEN  PRINT " STARTING";
  232. 2780  INPUT " RECORD NUMBER ";RN$:A =  VAL(RN$)
  233. 2790  IF A <1  OR A >X -1  THEN  PRINT : PRINT " ONLY "X -1" RECORDS IN FILE, REENTER": GOTO 2770
  234. 2800 SQ = 1:PNT = A: GOSUB 4700
  235. 2810  GOSUB 3300: GOTO 2900
  236. 2820  HOME : VTAB 3: HTAB 9: PRINT " END OF FILE REACHED ": GOSUB 2350: GOTO 2430
  237. 2900  REM  ** FOUND **
  238. 2910  GOSUB 3400
  239. 2920  VTAB 1: HTAB 10: PRINT " RECORD NUMBER "PNT
  240. 2940  IF SS  THEN 3000
  241. 2950  IF SQ  THEN  GOSUB 2350: GOTO 2430
  242. 2960  HTAB 5: VTAB 22: CALL  -958: PRINT " CONTINUE SEARCH? Y(ES, N(O ";: GET Q$: PRINT Q$
  243. 2970  IF Q$ = "N"  THEN 2430
  244. 2980  GOTO 2750
  245. 3000  REM  ** SEQUENTIAL SEARCH
  246. 3010  HTAB 8: VTAB 22: CALL  -868: PRINT "(( <---, --->, Q)UIT )) ";: GET Q$: PRINT Q$
  247. 3020  IF Q$ =  CHR$(21)  THEN A = A +1: GOTO 3060
  248. 3030  IF Q$ =  CHR$(8)  THEN A = A -1: GOTO 3060
  249. 3040  IF Q$ < >"Q"  THEN 3000
  250. 3050  GOTO 2430
  251. 3060  IF A >X -1  THEN  HTAB 6: PRINT "*** END OF FILE REACHED ***":A = X -1: GOTO 3000
  252. 3070  IF A <1  THEN  HTAB 5: PRINT "*** START OF FILE REACHED ***":A = 1: GOTO 3000
  253. 3080  GOTO 2800
  254. 3100  REM  ** BALANCE **
  255. 3110  VTAB 5:H = 39
  256. 3120  PRINT "   POSTED DEPOSITS.........";:PP = PD: GOSUB 3200
  257. 3130  PRINT "   POSTED CHECKS...........";:PP = PC: GOSUB 3200
  258. 3140  PRINT "   BANK BALANCE............";:PP = BB: GOSUB 3200: PRINT 
  259. 3150  PRINT "   OUTSTANDING DEPOSITS....";:PP = OD: GOSUB 3200
  260. 3160  PRINT "   OUTSTANDING CHECKS......";:PP = OC: GOSUB 3200
  261. 3170  PRINT "   CHECKBOOK BALANCE.......";:PP = CB: GOSUB 3200
  262. 3180  PRINT : HTAB 4: PRINT "TOTAL OF ";TR;" RECORDS IN FILE"
  263. 3190  PRINT : VTAB 23: PRINT " (( PRESS ANY KEY TO RETURN TO MENU )) ";: GET AN$: PRINT AN$: GOTO 5000
  264. 3200  REM  ** PRINT COLUMNS **
  265. 3210  REM  ENTER WITH H(HTAB) AND PP(WHAT YOU WANTED PRINTED IN COLUMN
  266. 3220  IF PP = 0  THEN PP$ = "0.00 ": GOTO 3250
  267. 3230 SG = 1:SG$ = " ": IF PP <0  THEN SG =  -1:SG$ = "-"
  268. 3240 PP$ =  LEFT$( STR$(PP *SG +.005), LEN( STR$(PP *SG +.005)) -1) +SG$
  269. 3250  HTAB H - LEN(PP$): PRINT PP$
  270. 3260  RETURN 
  271. 3300  REM  ** PRINT FRAME **
  272. 3310  HOME 
  273. 3320  FOR K = 1 TO N
  274. 3330  VTAB T%(K,1): HTAB T%(K,0) - LEN(N$(K)) -3: PRINT N$(K)" : ";
  275. 3340  VTAB T%(K,1): HTAB T%(K,0): PRINT  LEFT$(P$,T%(K,2))
  276. 3350  NEXT : RETURN 
  277. 3400  REM  ** PRINT DATA **
  278. 3410  FOR K = 1 TO N
  279. 3420  HTAB T%(K,0): VTAB T%(K,1): PRINT  LEFT$(Z$,T%(K,2))
  280. 3430  HTAB T%(K,0): VTAB T%(K,1): PRINT O$(K)
  281. 3440  NEXT : RETURN 
  282. 3500  REM  ** RPTIDX ONERR RTN
  283. 3510  IF  PEEK(222) < >6  THEN  INVERSE : PRINT "ERROR # " PEEK(222)" IN LINE " PEEK(218) + PEEK(219) *256: NORMAL : END 
  284. 3520  POKE 216,0
  285. 3530  GOSUB 3600:IP = 1: GOSUB 4000: GOSUB 4900: GOTO 6220
  286. 3600  REM  ** OPEN RPTIDX
  287. 3610  PRINT D$"OPEN"F$"-RPTIDX,L17"
  288. 3620  RETURN 
  289. 3700  REM  ** READ RPTIDX POINTER
  290. 3710  PRINT D$"READ"F$"-RPTIDX,R0"
  291. 3720  INPUT IP
  292. 3730  PRINT D$: RETURN 
  293. 3800  REM  ** READ RPTIDX DATA
  294. 3810  PRINT D$"READ"F$"-RPTIDX,R"IP
  295. 3820  INPUT ID$(IP)
  296. 3830  PRINT D$: RETURN 
  297. 3900  REM  ** WRITE RPTIDX DATA
  298. 3910  PRINT D$"WRITE"F$"-RPTIDX,R"IP
  299. 3920  PRINT ID$(IP)
  300. 3930  PRINT D$: RETURN 
  301. 4000  REM  ** WRITE RPTIDX POINTER
  302. 4010  PRINT D$"WRITE"F$"-RPTIDX,R0"
  303. 4020  PRINT IP
  304. 4030  PRINT D$: RETURN 
  305. 4500  REM  ** OPEN DATA FILE **
  306. 4510  PRINT D$"OPEN"F$"-DATA,L"LGH +N
  307. 4520  RETURN 
  308. 4600  REM  ** READ POINTER **
  309. 4610  PRINT D$"READ"F$"-DATA,R0"
  310. 4620  INPUT PNT
  311. 4630  PRINT D$: RETURN 
  312. 4700  REM  ** READ DATA **
  313. 4710  PRINT D$"READ"F$"-DATA,R"PNT
  314. 4720  FOR R = 1 TO N
  315. 4730  INPUT O$(R)
  316. 4740  IF R = 3  OR R = 4  THEN O$(R) =  RIGHT$("0" +O$(R),2)
  317. 4750  IF R = 7  OR R = 8  THEN O$(R) =  RIGHT$(" " +O$(R),1)
  318. 4760  NEXT 
  319. 4770  PRINT D$: RETURN 
  320. 4800  REM  ** READ BALANCE **
  321. 4810  PRINT D$"OPEN"F$"-BAL"
  322. 4820  PRINT D$"READ"F$"-BAL"
  323. 4830  INPUT OC: INPUT OD: INPUT PC: INPUT PD
  324. 4840  INPUT BB: INPUT CB
  325. 4860  GOSUB 4900
  326. 4870  RETURN 
  327. 4900  REM  ** CLOSE FILES **
  328. 4910  PRINT D$"CLOSE"
  329. 4920  RETURN 
  330. 5000  REM  ** REPORTING MENU **
  331. 5010  HOME 
  332. 5020  PRINT D$"CLOSE"
  333. 5030 HV = 1:HS = 1:HL$ = "CH.A.M.P.": GOSUB 2200
  334. 5040 HV = 2:HS = 0:HL$ = "REPORTING PROGRAM": GOSUB 2200
  335. 5050 HV = 3:HS = 0:HL$ = "<<AVAILABLE OPTIONS>>": GOSUB 2200
  336. 5060  FOR ME = 10 TO 20: VTAB V%(ME): HTAB 5: PRINT N$(ME): NEXT ME
  337. 5070 LM = 10:HM = 20:H = 5: REM  SET UP MENU VALUES
  338. 5080  GOSUB 600: REM  GOTO MENU CONTROLLER
  339. 5090 MM = 0:ME = I1
  340. 5100  IF ME = 10  THEN TY$ = "O": GOSUB 800: GOSUB 900: GOTO 5000
  341. 5110  IF ME = 11  THEN SM = 0:RG = 0:TY$ = "O": GOSUB 900: GOTO 5000
  342. 5120  IF ME = 12  THEN TY$ = "P": GOSUB 800: GOSUB 900: GOTO 5000
  343. 5130  IF ME = 13  THEN SM = 0:RG = 0:TY$ = "P": GOSUB 900: GOTO 5000
  344. 5140  IF ME = 14  THEN  GOSUB 1600: GOTO 5000
  345. 5150  IF ME = 15  THEN  GOSUB 2000: GOTO 3100
  346. 5160  IF ME = 16  THEN MM = 1: GOSUB 1200:MM = 0: GOTO 5000
  347. 5170  IF ME = 17  THEN  GOSUB 1900: GOTO 5000
  348. 5180  IF ME = 18  THEN  GOSUB 300: GOTO 5000
  349. 5190  IF ME = 19  THEN  GOTO 2400
  350. 5200  IF ME = 20  THEN 5500
  351. 5210  GOTO 5000
  352. 5500  REM  ** SHUTDOWN **
  353. 5510  PRINT D$"LOCK"F$"-RPTIDX"
  354. 5520  HOME : VTAB 10: HTAB 13: PRINT " RUN COMPLETE"
  355. 5530  END 
  356. 6000  REM  ** INITIALIZATION **
  357. 6010  ONERR  GOTO 6500
  358. 6020  PRINT D$"UNLOCK"F$"-DATA": POKE 216,0
  359. 6030  READ N: READ LGH
  360. 6040  GOSUB 4500: GOSUB 4600:TR = PNT -1: REM  OPEN DATA FILE, READ & SAVE NBR OF RECORDS
  361. 6050  DIM N$(29),T%(N,4),O$(N),MO$(11),V%(29),ID$(TR)
  362. 6060  FOR I = 1 TO N
  363. 6070  READ N$(I)
  364. 6080  FOR J = 0 TO 4
  365. 6090  READ T%(I,J)
  366. 6100  IF A <T%(J,2)  THEN A = T%(J,2)
  367. 6110  NEXT : READ V%(I): NEXT 
  368. 6120  READ N$(9): READ V%(9)
  369. 6130  READ T%(0,0): REM  NBR OF QUICK SEARCH FIELDS
  370. 6140  FOR I = 1 TO A:Z$ = Z$ +" ":P$ = P$ +".":DH$ = DH$ +"-": NEXT 
  371. 6150  HOME :HS = 1:HV = 1:HL$ = "CH.A.M.P.": GOSUB 2200:HS = 0:HV = 2:HL$ = "CHECKBOOK REPORTING PROGRAM": GOSUB 2200
  372. 6180  VTAB 4: HTAB 4: CALL  -868: PRINT "PRIMARY DATABASE BEING ";
  373. 6190  FLASH : PRINT "INITIALIZED": NORMAL 
  374. 6200  ONERR  GOTO 3500
  375. 6210  PRINT D$"UNLOCK"F$"-RPTIDX": POKE 216,0
  376. 6220  FOR M = 0 TO 11: READ MO$(M): NEXT : FOR I = 10 TO 29: READ N$(I): READ V%(I): NEXT 
  377. 6240  GOSUB 3600: GOSUB 3700:ST = IP: IF ST = 1  THEN 6260
  378. 6250  FOR IP = 1 TO ST -1: GOSUB 3800: NEXT IP: REM  READ IN ALL OLD INDEXES
  379. 6260  IF ST >TR  THEN 6340
  380. 6270  GOSUB 4500: FOR PNT = ST TO TR: REM  CREATE AND NEW INDEXES NEEDED
  381. 6280  GOSUB 4700:ACHECK =  LEFT$(O$(1),1) < = "9": REM  A CHECK IF 1ST CHAR IS NUMERIC
  382. 6290  IF   NOT ACHECK  THEN CHK$ = "0" + LEFT$(O$(1),1) + RIGHT$("000" + STR$( VAL( MID$ (O$(1),2))),3)
  383. 6300  IF ACHECK  THEN CHK$ = "1" + RIGHT$("0000" + STR$( VAL(O$(1))),4)
  384. 6310 ID$(PNT) = CHK$ +O$(7) +O$(8) +O$(3) +O$(4) +O$(6) + RIGHT$("0000" + STR$(PNT),4)
  385. 6320  NEXT PNT
  386. 6330  FOR IP = ST TO TR: GOSUB 3900: NEXT IP: REM  SAVE ANY NEW INDEXES
  387. 6340  GOSUB 4000: GOSUB 4900: REM  SAVE NEW NBR OF INDEXES & CLOSE FILES
  388. 6350  VTAB 4: HTAB 4: PRINT  CHR$(7);"PRIMARY DATABASE COMPLETED        "
  389. 6360  GOSUB 4800: REM  READ BALS
  390. 6370  GOTO 5000: REM  GOTO MAIN MENU
  391. 6500  REM  ** ONERR ROUTINE **
  392. 6510  REM  IF FILE NOT FOUND
  393. 6520  HOME 
  394. 6530  IF  PEEK(222) < >6  THEN  PRINT " ERROR #" PEEK(222)" IN LINE " PEEK(218) + PEEK(219) *256: END 
  395. 6540  POKE 216,0
  396. 6550  VTAB 21: PRINT " FILE '";F$;"-DATA'"
  397. 6560  PRINT " IS NOT ON THE CATALOG.": PRINT " DO YOU WISH TO INSERT A NEW DISKETTE?": PRINT " Y)ES, N)O ";: GET AN$: PRINT AN$: IF AN$ = "N"  THEN  GOTO 5520
  398. 6570  PRINT " PLEASE ENTER NEW DISK AND PRESS RETURN";: GET AN$: PRINT AN$
  399. 6580  GOTO 10
  400. 7000  REM  PROGRAM DATA STMTS
  401. 7010  DATA  8,49,CHECK-NUM,13,4,4,1,2,6,PAY-TO,10,6,30,0,0,7,MO,6,8,2,2,8,8,DAY,17,8,2,3,10,9,AMOUNT,10,10,8,0,0,10,POSTED,30,10,1,4,12,11,MAJ-CD,10,12,1,5,6,12,MIN-CD,23,12,1,6,7,13,QUIT,14,6
  402. 7020  DATA  JANUARY,FEBRUARY,MARCH,APRIL,MAY,JUNE,JULY,AUGUST,SEPTEMBER,OCTOBER,NOVEMBER,DECEMBER
  403. 7030  DATA  OUTSTANDING ITEMS FOR A MONTH ,5,OUTSTANDING ITEMS FOR THE YEAR,6,POSTED ITEMS FOR A MONTH ,8,POSTED ITEMS FOR A YEAR,9,PRINT BANK RECONCILIATION,11,CURRENT ACCOUNT STATUS,12
  404. 7040  DATA  MAJOR/MINOR CODE ANALYSIS,14,GRAPHIC CHECKBOOK ANALYSIS,15,SORT ON AN ITEM,17,VIEW A RECORD,18,QUIT,20
  405. 7050  DATA  RECORD NUMBER,6,MATCH ON FIELDS,8,SEQUENTIAL SEARCH,10,RETURN TO MENU,12,CHECK NUMBER,6,DATE ISSUED,8,MAJOR/MINOR CODES,10,MASTER SORT,12,RETURN TO MENU,14